# -*- coding:utf-8 -*-
__author__ = 'LangJin'
import os
import datetime
from flask import Blueprint,request,g
from werkzeug.utils import secure_filename
from utils.redisFunc import RedisDb as redis
from utils.responseFunc import resultMsg
from utils.requetFunc import RequestParser
from utils.jwtFunc import JWTManager as jwt
from app.views import public,private


@public.route('/welcome', methods=['get'])
def version():
    """
    @功能    :访问案例
    @参数    :
    @返回值  :
    @时间    :2022/12/29 00:06:30
    @作者    :浪晋
    @版本    :1.0
    """
    data = {
        "version":"1.0", 
        "info":"欢迎访问"
    }
    return resultMsg(data=data)


@public.route("/mysql", methods=['get'])
def get_mysql_data():
    """
    @功能    :访问mysql案例
    @参数    :
    @返回值  :
    @时间    :2022/12/29 00:07:06
    @作者    :浪晋
    @版本    :1.0
    """
    db = g.db
    sql = "select * from tb_user;"
    result = db.fetchall(sql)
    return resultMsg(data=result)


@public.route("/redis", methods=['get'])
def get_redis_data():
    """
    @功能    :访问redis案例
    @参数    :
    @返回值  :
    @时间    :2022/12/29 00:07:23
    @作者    :浪晋
    @版本    :1.0
    """
    result = redis().get_keys()
    return resultMsg(data=result)


@public.route("/login",methods=["post"])
def login():
    """
    @功能    :登录案例
    @参数    :
    @返回值  :
    @时间    :2022/12/29 00:07:38
    @作者    :浪晋
    @版本    :1.0
    """
    db = g.db
    ip = request.headers.get('X-Real-Ip') or request.remote_addr
    body = request.get_json()
    account = body.get("account")
    password = body.get("password")
    parse = RequestParser()
    parse.add_argument(value=account,name="账号",remark="不能为空",required=True)
    parse.add_argument(value=password,name="密码",remark="不能为空",required=True)
    parseMsg = parse.parse_args()
    if parseMsg:
        return resultMsg(code=0, msg=parseMsg)
    sql = "select id,account,nickName,phone,avatar,status from tb_user where account ='{}' and password = '{}' and status = 1;".format(account,password)
    result = db.fetchone(sql)
    if not result:
        return resultMsg(code=0,msg="账号或者密码错误!")
    if result["status"] != 1:
        return resultMsg(code=0,msg="账号已被禁用!")
    data = {'lastLoginTime':datetime.datetime.now(),'lastLoginIp':ip}
    query = {'id':result["id"]}
    db.update(table='tb_user',data=data,query=query)
    db.commit()
    token = jwt.generate(result)
    result.update({"token":token})
    redis().set_value(account,token)
    return resultMsg(msg="登录成功！",data=result)


@private.route("/check")
def check():
    """
    @功能    :token测试案例
    @参数    :
    @返回值  :
    @时间    :2022/12/29 00:07:58
    @作者    :浪晋
    @版本    :1.0
    """
    return resultMsg(msg="token校验通过,已登录")


@private.route('/upload', methods=['post'])
def upload_file():
    """
    @功能    :保存用户上传的文件
    @参数    :
    @返回值  :
    @时间    :2022/12/28 17:29:11
    @作者    :浪晋
    @版本    :1.0
    """
    f = request.files.get("upload")
    f.save(os.getcwd()+'/uploads/' + secure_filename(f.filename))
    return resultMsg(msg="上传成功")

